package com.mes.task.dao.iface;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.bstek.dorado.data.provider.Page;
import com.mes.common.dao.iface.IBasicDao;
import com.mes.task.domain.OperationTask;

public interface IOperationTaskDao extends IBasicDao<OperationTask> {

	/**
	 * 获取某个零件任务下的所有工序任务
	 * 
	 * @param partTaskUid
	 *            零件任务Uuid
	 * @param isDesc
	 *            是否按照operaitonId倒排序
	 * @return
	 */
	public List<OperationTask> getOperationTasksByPartTaskUid(String partTaskUid, Boolean isDesc);

	/**
	 * 获取某个零件任务下顺序号大于operationId的工序任务
	 * 
	 * @param partTaskUid
	 *            零件任务Uuid
	 * @param operationId
	 *            工序OperationId应该大于的值
	 * @param isDesc
	 *            是否按照operaitonId倒排序
	 * @return
	 */
	public List<OperationTask> getOperationTasksByPartTaskUid(String partTaskUid, Double operationId, Boolean isDesc);

	/**
	 * 查找某个零件任务下的厂外协作工序
	 * 
	 * @param partTaskUid
	 * @return
	 */
	public List<OperationTask> getWaixieOperationTasksByPartTaskUid(String partTaskUid);

	/**
	 * 获取某一部门的在制工序任务，零件必须为其主制 from,size两个参数用于分页，如果有一项为空，则不进行分页
	 */
	public List<OperationTask> getWipOperationTasks(String masterShopUid, Integer from, Integer size);
	// public List<WorkRecord> getWorkRecords(String deptUid,Date fromDate,Date
	// toDate);

	/*
	 * 通过part_uid,batchnum,operation_iddesc 获取某一个零件任务的 工序对象
	 * 
	 * @param partTask
	 * 
	 * @param operationIdDesc
	 * 
	 * @return
	 * 
	 * @throws BaseBusinessException
	 */
	public OperationTask getOperationTask(String partUid, String batchNum, String operationIdDesc);

	public OperationTask getCurrentOperationTask(String partUid, String batchNum) throws Exception;

	/**
	 * 获取某一个零件任务的所有工序任务
	 * 
	 * @param parentUid
	 * @return
	 */
	public List<OperationTask> getOperationTasksByParentUid(String parentTaskUid);

	/**
	 * 获取某一个零件任务的某一道工序排序号之后的所有工序任务
	 * 
	 * @param parentUid
	 * @param operationId
	 * @return
	 */
	public List<OperationTask> getOperationTasksByParentUid(String parentTaskUid, Float operationId);

	/**
	 * 获取汇检工序任务 created by nk
	 */
	@SuppressWarnings("unchecked")
	public List<OperationTask> getSummaryCheckOperationTask(String taskType, String serviceDeptId, String drawingId,
			String batchNum, Integer taskDistance, String invDemandState);

	/**
	 * 获取某个零件任务未完的工序任务
	 * 
	 * @param partTaskUid
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<OperationTask> getUnFinishTasksByPartTask(String partTaskUid) throws Exception;

	public List<OperationTask> getOperationTaskByPrepareState(String taskType, String serviceDeptId, String masterShop,
			String drawingId, String batchNum, Integer taskDistance, String prepareState);

	public List<OperationTask> getOperationTaskByPartUidAndBatchNum(String partUid, String batchNum, boolean sort,
			Page page);

	/**
	 * 获取某一部门某一时间之前的已派工任务，包括已开始
	 * 
	 * @param masterShopUid
	 * @param planStartBefore
	 * @param page
	 * @return
	 */
	public List<OperationTask> getDispatchOperationTasks(String masterShopUid, Date planStartBefore, Page page);

	/**
	 * 取得某一个零件任务能够反馈的工序任务集合，包括已经派工的和工人可自己领取的任务
	 * 
	 * @param partUid
	 * @param batchNum
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<OperationTask> getCanFeedbackOperationTasks(String partUid, String batchNum) throws Exception;

	/**
	 * 获取责任工序
	 * 
	 * @param dataSet
	 * @throws Exception
	 */
	public List<OperationTask> getDutyOperationTasks(String partNumber, String batchNum, List list) throws Exception;

	/**
	 * 取得某零件任务在某道工序之前的未完工序任务，如果beforeOperationId为空，则返回所有未完工序
	 * 
	 * @param partTaskUid
	 * @param beforeOperationId
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<OperationTask> getUnFinishTasksByPartTask(String partTaskUid, Float beforeOperationId) throws Exception;

	/**
	 * 获取某一零件任务指定状态的工序任务
	 * 
	 * @param parentTaskUid
	 * @param taskState
	 * @return
	 */
	public List<OperationTask> getOperationTasksByParentUid(String parentTaskUid, int taskState);

	/**
	 * 根据AOtaskUid查询工序任务 hba
	 * 
	 * @param taskUid
	 * @return
	 */
	public List<OperationTask> getAOOperationTask(String taskUid);

	public void getOperationTaskByCondition(Page<OperationTask> page, Map<String, Object> params) throws Exception;

}
